package com.ch.base.util;
/*
 * 什麼是XSS攻擊
 * 	XSS攻擊：跨站腳本攻擊(Cross Site Scripting)，為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。故將跨站腳本攻擊縮寫為XSS。
 * 	XSS是一種經常出現在web應用中的計算機安全漏洞，它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。
 * 	比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)。
 * 	這種類型的漏洞由於被駭客用來編寫危害性更大的phishing攻擊而變得廣為人知。
 * 	對於跨站腳本攻擊，黑客界共識是：跨站腳本攻擊是新型的「緩衝區溢出攻擊「，而JavaScript是新型的「ShellCode」。

 * XSS攻擊的危害包括
 * 1、盜取各類用戶帳號，如機器登錄帳號、用戶網銀帳號、各類管理員帳號
 * 2、控制企業數據，包括讀取、篡改、添加、刪除企業敏感數據的能力
 * 3、盜竊企業重要的具有商業價值的資料
 * 4、非法轉賬
 * 5、強制發送電子郵件
 * 6、網站掛馬
 * 7、控制受害者機器向其它網站發起攻擊
 * 
 * XSS漏洞的分類
 * XSS漏洞按照攻擊利用手法的不同，有以下三種類型：
 * 	類型A，本地利用漏洞，這種漏洞存在於頁面中客戶端腳本自身。其攻擊過程如下所示：
 * 		Alice給Bob發送一個惡意構造了Web的URL。
 * 		Bob點擊並查看了這個URL。
 * 		惡意頁面中的JavaScript打開一個具有漏洞的HTML頁面並將其安裝在Bob電腦上。
 * 		具有漏洞的HTML頁面包含了在Bob電腦本地域執行的JavaScript。
 * 		Alice的惡意腳本可以在Bob的電腦上執行Bob所持有的權限下的命令。
 * 	類型B，反射式漏洞，這種漏洞和類型A有些類似，不同的是Web客戶端使用Server端腳本生成頁面為用戶提供數據時，如果未經驗證的用戶數據被包含在頁面中而未經HTML實體編碼，客戶端代碼便能夠注入到動態頁面中。其攻擊過程如下：
 * 		Alice經常瀏覽某個網站，此網站為Bob所擁有。Bob的站點運行Alice使用用戶名/密碼進行登錄，並存儲敏感信息(比如銀行帳戶信息)。
 * 		Charly發現Bob的站點包含反射性的XSS漏洞。
 * 		Charly編寫一個利用漏洞的URL，並將其冒充為來自Bob的郵件發送給Alice。
 * 		Alice在登錄到Bob的站點後，瀏覽Charly提供的URL。
 * 		嵌入到URL中的惡意腳本在Alice的瀏覽器中執行，就像它直接來自Bob的服務器一樣。此腳本盜竊敏感信息(授權、信用卡、帳號信息等)然後在Alice完全不知情的情況下將這些信息發送到Charly的Web站點。
 * 	類型C，存儲式漏洞，該類型是應用最為廣泛而且有可能影響到Web服務器自身安全的漏洞，駭客將攻擊腳本上傳到Web服務器上，使得所有訪問該頁面的用戶都面臨信息洩漏的可能，其中也包括了Web服務器的管理員。其攻擊過程如下：
 * 		Bob擁有一個Web站點，該站點允許用戶發佈信息/瀏覽已發佈的信息。
 * 		Charly注意到Bob的站點具有類型C的XXS漏洞。
 * 		Charly發佈一個熱點信息，吸引其它用戶紛紛閱讀。
 * 		Bob或者是任何的其他人如Alice瀏覽該信息，其會話cookies或者其它信息將被Charly盜走。
 * 
 * 類型A直接威脅用戶個體，而類型B和類型C所威脅的對象都是企業級Web應用
 */
public class CheckXss {
	//檢查&避免遭受XSS攻擊
	public CheckXss() {
	}

	public String CheckXssString(String check){
		String reCheck = "";
		String[] symbol = {
				"~", "%", "^", "]", "<", ">", "��", "\r", "\n", "../",";","--", "select",
				"update", "delete", "insert", "SELECT", "UPDATE", "DELETE", "INSERT",
				"where", "WHERE", "from", "FROM"};
		if (!check.equals("") && check != null) {
			for (int i = 0; i < symbol.length; i++) {
				if (check.indexOf(symbol[i]) > -1) {
					check = check.replaceAll(symbol[i], "");
				}
			}
		}
		reCheck = check;
		return reCheck;

	}
}

